<?php
namespace App\Api\Autojs;

use PhalApi\Api;
use PhalApi\Exception\BadRequestException;

/**
 * 盒马接口
 * @desc 提供盒马相关数据的增删改查接口
 */
class Hema extends Api {
    public function getRules() {
        return array(
            'hema' => array(),
            'fix' => array()
        );
    }

    /**
     * fix
     * @desc 处理hmsshuju表数据
     * @return array 操作结果
     * @exception 400 参数错误
     */
    public function fix()
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: *');

        $where = array( 'int_price < ?' => 999 );
        $existing = \PhalApi\DI()->notorm->hmsshuju->where($where)->fetchAll();
        if( $existing ){
            foreach( $existing as $value ){
                        // 提取价格中的数字部分（如¥35.8/罐提取35.8）
                preg_match('/(\d+\.?\d*)/', $value['vip'], $priceMatches);
                $priceNum = isset($priceMatches[1]) ? floatval($priceMatches[1]) : 0;
                $int_price = (float)sprintf('%.2f', $priceNum); // 直接保留两位小数并转换为浮点数
                if($int_price){
                    $int_price = number_format($int_price, 2, '.', ''); // 格式化为两位小数的字符串（无千位分隔符）
                    \PhalApi\DI()->notorm->hmsshuju->where('id', $value['id'])->update(array('int_price'=>$int_price ));
                }
            }
        }

        return count($existing);
        
    }





    /**
     * 添加/更新数据
     * @desc 处理hmsshuju表数据
     * @return array 操作结果
     * @exception 400 参数错误
     */
    public function hema()
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: *');

        $json = file_get_contents('php://input');
        if (empty($json)) {
            throw new BadRequestException('请求体不能为空');
        }
        $obj = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new BadRequestException('JSON格式错误: ' . json_last_error_msg());
        }        
        // 验证必要字段
        if (empty($obj['title']) || strpos($obj['title'], '¥') !== false) {
            throw new BadRequestException('title字段不能为空 > '.strpos($obj['title'], '¥'));
        }
        // 验证必要字段
        if (empty($obj['price']) ) {
            throw new BadRequestException('price字段不能为空');
        }
        
        // 转义特殊字符
        $obj = array_map(function($value) {
            return is_string($value) ? addslashes($value) : $value;
        }, $obj);

        // 提取价格中的数字部分（如¥35.8/罐提取35.8）
        preg_match('/(\d+\.?\d*)/', $obj['price'], $priceMatches);
        $priceNum = isset($priceMatches[1]) ? floatval($priceMatches[1]) : 0;
        $int_price = (float)sprintf('%.2f', $priceNum); // 直接保留两位小数并转换为浮点数
        if($int_price){
            $obj['int_price'] = number_format($int_price, 2, '.', ''); // 格式化为两位小数的字符串（无千位分隔符）
            $obj['other'] = $obj['int_price'];
        }
        
        $obj['update_time'] = date('Y-m-d H:i:s');
        try {
            $where = [
                'title' => $obj['title'],
                'shop' => $obj['shop'],
            ];
            $existing = \PhalApi\DI()->notorm->hmsshuju->where($where)->fetchOne();
            if ($existing) {
                $existing['update_time'] = date('Y-m-d H:i:s', time());
                $obj['count'] = $existing['count'] + 1;

                // 这里的other我是准备把价格存成 26.00,30.00, 45.00, 再把新来的 other ，看是否存在数组中，不在就存入，在就不存了。
                $existingOther = explode(',', $existing['other']); // 假设existing['other']是一个逗号分隔的字符串
                if (!in_array($obj['other'], $existingOther)) {
                    $existingOther[] = $obj['other']; // 将新的other添加到数组中
                    $existing['other'] = implode(',', $existingOther); // 将数组重新组合成字符串
                }
                \PhalApi\DI()->notorm->hmsshuju->where('id', $existing['id'])->update($obj);
                return ['code' => 1, 'msg' => '更新成功', 'data' => ['id' => $existing['id']]];
            }
            $obj['create_time'] = date('Y-m-d H:i:s');
            $id = \PhalApi\DI()->notorm->hmsshuju->insert($obj);
            return ['code' => 1, 'msg' => '创建成功', 'data' => ['id' => $id]];
        } catch (\Exception $e) {
            throw new BadRequestException($e->getMessage());
        }
    }


}